// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CC_TEST_FAKE_PAINTED_SCROLLBAR_LAYER_H_
#define CC_TEST_FAKE_PAINTED_SCROLLBAR_LAYER_H_

#include <stddef.h>

#include <memory>

#include "cc/layers/painted_scrollbar_layer.h"
#include "cc/test/fake_scrollbar.h"

namespace base {
template <typename T>
class AutoReset;
}

namespace cc {

class FakePaintedScrollbarLayer : public PaintedScrollbarLayer {
public:
    static scoped_refptr<FakePaintedScrollbarLayer> Create(
        bool paint_during_update,
        bool has_thumb,
        int scrolling_layer_id);
    static scoped_refptr<FakePaintedScrollbarLayer> Create(
        bool paint_during_update,
        bool has_thumb,
        ScrollbarOrientation orientation,
        bool is_left_side_vertical_scrollbar,
        bool is_overlay,
        int scrolling_layer_id);
    int update_count() const { return update_count_; }
    void reset_update_count() { update_count_ = 0; }

    bool Update() override;

    void PushPropertiesTo(LayerImpl* layer) override;

    std::unique_ptr<base::AutoReset<bool>> IgnoreSetNeedsCommit();

    size_t push_properties_count() const { return push_properties_count_; }
    void reset_push_properties_count() { push_properties_count_ = 0; }

    // For unit tests
    UIResourceId track_resource_id()
    {
        return PaintedScrollbarLayer::track_resource_id();
    }
    UIResourceId thumb_resource_id()
    {
        return PaintedScrollbarLayer::thumb_resource_id();
    }
    FakeScrollbar* fake_scrollbar()
    {
        return fake_scrollbar_;
    }
    using PaintedScrollbarLayer::UpdateInternalContentScale;
    using PaintedScrollbarLayer::UpdateThumbAndTrackGeometry;

private:
    FakePaintedScrollbarLayer(FakeScrollbar* fake_scrollbar,
        int scrolling_layer_id);
    ~FakePaintedScrollbarLayer() override;

    int update_count_;
    size_t push_properties_count_;
    FakeScrollbar* fake_scrollbar_;
};

} // namespace cc

#endif // CC_TEST_FAKE_PAINTED_SCROLLBAR_LAYER_H_
